﻿using System;
using System.IO;
using System.Text;
using ClieOp;
using NUnit.Framework;

namespace ClieOpTest
{
    [TestFixture]
    internal class ParseBestandTest
    {
        [Test]
        public void ParseBestandTest1()
        {
            var bestand1 = new Bestand("ABC01");
            bestand1.AddBatch(new Batch(1234567, new DateTime(2020, 10, 30), "N.A.A.M. Opdrachtgever"));
            var post1 = new Post((decimal)1.23, 7654321, "B. Etaler", "1234567890");
            post1.AddOmschrijving("Omschrijving 1");
            post1.AddOmschrijving("Omschrijving 2");
            bestand1.Batches[0].AddPost(post1);
            var post2 = new Post((decimal)98.77, 7654321, "B. Etaler", "8888888888");
            post2.AddOmschrijving("Omschrijving 1");
            post2.AddOmschrijving("Omschrijving 2");
            bestand1.Batches[0].AddPost(post2);
            var memorystream = new MemoryStream(Encoding.Default.GetBytes(bestand1.ToString()));
            var reader = new ClieOpReader(memorystream);
            Bestand bestand2 = Bestand.Parse(reader);
            Assert.AreEqual(bestand1.Batches[0].Totaalbedrag, bestand2.Batches[0].Totaalbedrag);
        }

        [Test]
        public void ParseBestandTest2()
        {
            const string bestandString =
                "0001A311210CLIEOP03ABC0131011                     \r\n0010B1000012345670001EUR                          \r\n"
                + "0030B1301020N.A.A.M. Opdrachtgever             P  \r\n0100A100200000000012300076543210001234567         \r\n"
                + "0110BB. Etaler                                    \r\n0150A1234567890                                   \r\n"
                + "0160AOmschrijving 1                               \r\n0160AOmschrijving 2                               \r\n"
                + "0100A100200000000987700076543210001234567         \r\n0110BB. Etaler                                    \r\n"
                + "0150A8888888888                                   \r\n0160AOmschrijving 1                               \r\n"
                + "0160AOmschrijving 2                               \r\n9990A00000000000001000000177777760000002          \r\n"
                + "9999A                                             \r\n";
            var memorystream = new MemoryStream(Encoding.Default.GetBytes(bestandString));
            var reader = new ClieOpReader(memorystream);
            Bestand bestand = Bestand.Parse(reader);
            Assert.AreEqual("3101", bestand.Bestandsidentificatie);
        }
    }
}